import UIKit

//
@available(iOS 9.0, *)
extension QKC where AA :UIFieldBehavior {
    open func items_qk_g() -> QKC<AA,YY,ZZ, [UIDynamicItem] >{
		 self +^ self.value.items
	}

	/**
     The position (origin) of the field in the reference coordinate system
     */
    open func position_qk_s(_ position:  CGPoint) -> QKC<AA,YY,ZZ, CGPoint>{
		return link(next: position).then_QK { $0.value.position = position }
	}
    open func position_qk_g() -> QKC<AA,YY,ZZ, CGPoint>{
		 self +^ self.value.position
	}

	/**
     The region property is the domain of the field's effect. No force is applied to objects outside the region.
     The default region is the infiniteRegion
     */
    open func region_qk_s(_ region:  UIRegion) -> QKC<AA,YY,ZZ, UIRegion>{
		return link(next: region).then_QK { $0.value.region = region }
	}
    open func region_qk_g() -> QKC<AA,YY,ZZ, UIRegion>{
		 self +^ self.value.region
	}

    open func strength_qk_s(_ strength:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: strength).then_QK { $0.value.strength = strength }
	}
    open func strength_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.strength
	}

	/** The falloff exponent used to calculate field strength at a distance.
     Falloff starts at the minimum radius.
     The default exponent is zero, which results in a uniform field with no falloff.
     @see minimumRadius
     */
    open func falloff_qk_s(_ falloff:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: falloff).then_QK { $0.value.falloff = falloff }
	}
    open func falloff_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.falloff
	}

    open func minimumRadius_qk_s(_ minimumRadius:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: minimumRadius).then_QK { $0.value.minimumRadius = minimumRadius }
	}
    open func minimumRadius_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.minimumRadius
	}

	/** The direction of the field.
     If the field is non-directional, a zero vector will be returned
     @see linearGravityFieldWithVector:direction
     @see velocityFieldWithVector:direction
     */
    open func direction_qk_s(_ direction:  CGVector) -> QKC<AA,YY,ZZ, CGVector>{
		return link(next: direction).then_QK { $0.value.direction = direction }
	}
    open func direction_qk_g() -> QKC<AA,YY,ZZ, CGVector>{
		 self +^ self.value.direction
	}

	/** Fields without a smoothness component will return 0
     @see noiseFieldWithSmoothness:smoothness:animationSpeed
     @see turbulenceFieldWithSmoothness:smoothness:animationSpeed
     */
    open func smoothness_qk_s(_ smoothness:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: smoothness).then_QK { $0.value.smoothness = smoothness }
	}
    open func smoothness_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.smoothness
	}

	/** Fields that can be animated can have non zero values. A value of 2 will animate twice as fast as a value of 1.
     @see noiseFieldWithSmoothness:smoothness:animationSpeed
     @see turbulenceFieldWithSmoothness:smoothness:animationSpeed
     */
    open func animationSpeed_qk_s(_ animationSpeed:  CGFloat) -> QKC<AA,YY,ZZ, CGFloat>{
		return link(next: animationSpeed).then_QK { $0.value.animationSpeed = animationSpeed }
	}
    open func animationSpeed_qk_g() -> QKC<AA,YY,ZZ, CGFloat>{
		 self +^ self.value.animationSpeed
	}

    open func addItem_qk_f(_ item: UIDynamicItem) -> QKC<AA,YY,ZZ, UIDynamicItem>{
		 self +^ self.value.addItem(item) +^ item
	}

    open func removeItem_qk_f(_ item: UIDynamicItem) -> QKC<AA,YY,ZZ, UIDynamicItem>{
		 self +^ self.value.removeItem(item) +^ item
	}

}

